package com.gxc.graph;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 给出3组点坐标(x, y, w, h)，-1000<x,y<1000，w,h为正整数。
 *
 * (x, y, w, h)表示平面直角坐标系中的一个矩形：
 *
 * x, y为矩形左上角坐标点，w, h向右w，向下h。
 *
 * (x, y, w, h)表示x轴(x, x+w)和y轴(y, y-h)围成的矩形区域；
 *
 * (0, 0, 2, 2)表示 x轴(0, 2)和y 轴(0, -2)围成的矩形区域；
 *
 * (3, 5, 4, 6)表示x轴(3, 7)和y轴(5, -1)围成的矩形区域；
 *
 * 求3组坐标构成的矩形区域重合部分的面积。
 *
 * 输入描述
 * 3行输入分别为3个矩形的位置，分别代表“左上角x坐标”，“左上角y坐标”，“矩形宽”，“矩形高” -1000 <= x,y < 1000
 *
 * 输出描述
 * 输出3个矩形相交的面积，不相交的输出0
 *
 * 解法：
 * 重合的矩形为 max左边界限  min又边界线  min的上边界线  max的下边界线
 */
public class Rectangle {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> xLList = new ArrayList<>();
        List<Integer> xRList = new ArrayList<>();
        List<Integer> yHList = new ArrayList<>();
        List<Integer> yLList = new ArrayList<>();

        int lMax = Integer.MIN_VALUE;
        int rMin = Integer.MAX_VALUE;
        int hMax = Integer.MIN_VALUE;
        int hMin = Integer.MAX_VALUE;
        for (int i = 0;i<3;i++) {
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();
            int w = scanner.nextInt();
            int h = scanner.nextInt();

            int x2 = x1 + w;
            int y2 = y1 -h;

            xLList.add(x1);
            xRList.add(x2);
            yHList.add(y1);
            yLList.add(y2);

            lMax = Math.max(lMax, x1);
            rMin = Math.min(rMin, x2);
            hMin = Math.min(hMin, y1);
            hMax = Math.max(hMax, y2);
        }

        int x = rMin - lMax;
        int y = hMin - hMax;
        int area = x * y ;
        System.out.println(x<0 | y <0 ?0:Math.max(area, 0));
    }

    public static void main2(String[] args) {
        List<Integer> x_coords = new ArrayList<>();  // 存储所有矩形的x坐标
        List<Integer> y_coords = new ArrayList<>();  // 存储所有矩形的y坐标
        List<int[]> rectangles = new ArrayList<>();  // 存储所有矩形的左上角和右下角坐标
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();
            int w = scanner.nextInt();
            int h = scanner.nextInt();

            int x2 = x1 + w;  // 计算矩形的右上角x坐标
            int y2 = y1 - h;  // 计算矩形的右上角y坐标
            x_coords.add(x1);
            x_coords.add(x2);
            y_coords.add(y1);
            y_coords.add(y2);
            rectangles.add(new int[]{x1, y1, x2, y2});
        }

        int min_x_coord = Integer.MAX_VALUE;
        int max_x_coord = Integer.MIN_VALUE;
        int min_y_coord = Integer.MAX_VALUE;
        int max_y_coord = Integer.MIN_VALUE;
        for (int x : x_coords) {
            min_x_coord = Math.min(min_x_coord, x);
            max_x_coord = Math.max(max_x_coord, x);
        }
        for (int y : y_coords) {
            min_y_coord = Math.min(min_y_coord, y);
            max_y_coord = Math.max(max_y_coord, y);
        }

        int x_offset = 0 - min_x_coord;  // 计算x坐标的偏移量
        int y_offset = 0 - min_y_coord;  // 计算y坐标的偏移量

        int[][] intersection_area = new int[Math.abs(max_x_coord - min_x_coord)][Math.abs(max_y_coord - min_y_coord)];  // 创建表示矩形区域的二维数组

        for (int[] rectangle : rectangles) {
            int x1 = rectangle[0];
            int y1 = rectangle[1];
            int x2 = rectangle[2];
            int y2 = rectangle[3];
            for (int i = Math.min(x2, x1) + x_offset; i < Math.max(x2, x1) + x_offset; i++) {
                for (int j = Math.min(y2, y1) + y_offset; j < Math.max(y2, y1) + y_offset; j++) {
                    intersection_area[i][j] += 1;  // 在相应的区域加1
                }
            }
        }

        int ret = 0;
        for (int i = 0; i < intersection_area.length; i++) {
            for (int j = 0; j < intersection_area[0].length; j++) {
                if (intersection_area[i][j] == 3) {  // 统计值为3的区域的个数
                    ret += 1;
                }
            }
        }

        System.out.println(ret);  // 输出相交的面积
    }
}
